
local url = {}

local function decode_func(c)
    return string.char(tonumber(c, 16))
end

local function decode(str)
    local str = str:gsub('+', ' ')
    return str:gsub("%%(..)", decode_func)
end

function url.parse_url(u)
    local path,query = u:match "([^?]*)%??(.*)"
    if path then
        path = decode(path)
    end
    return path, query
end

function url.parse_query(q)
    local r = {}
    for k,v in q:gmatch "(.-)=([^&]*)&?" do
        r[decode(k)] = decode(v)
    end
    return r
end

return url
